Repository navigation
Let other modules' package releases pass the Tape Echo browser binding - #562
Merged
Merged
Conversation
The binding accepted only sourceCommit stamping in the shared package files, so any module release that changed compiled packages failed modules:check with "Invalid or stale Tape Echo browser preservation binding". Clean main passed; main plus one other module's coldfire-packages.json did not. publicationInputs now compares the shared package files, module-build.json and analog-bd-composition-proofs.json the way retained evidence already does: other modules' rows, version labels and source-tree identity are ignored (the helpers move to scripts/engine-asset.mjs, shared by both). A pure provenance stamp still has to match byte for byte. Anything else, the manifest file hashes, the provenance stamp and duplicate JSON keys are still checked. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
repeat98
pushed a commit
that referenced
this pull request
Oct 21, 2026
…anel (new module) (#747) * Stage Quantize Live Rec Toggle as a draft (QUANTIZE LIVE REC on [REC] + [PLAY]) Port of Zac-Kyoti's octabam module quantize-live-rec-toggle (sambanks/octabam 6e4aeb7, Zac-Kyoti/octatrack-kyoti-fw 77f132f), staged under sdk/drafts: not in the catalogue, not offered by the site. - patch_qlrec.s is the author's file, unchanged. - manifest.py declares the same floating unit and two jmp detours as a Linked unit with Detours, with address/length/SHA-256 guards in place of the stock bytes the author's declaration carried. The retired engine-frame site 0x400522ca is kept as a guard and checked by the gate. - verify.py: the image against the original OS, the gesture by the keys under the ColdFire port beside the original OS, and an emulated power cycle. 29 of 29 passed on the module-alone card build. - A full listing dry run matched native octabam on 130 selections; TESTING.md records it and what listing still needs. Not tested on any unit. Nothing has been tested on an MKII. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: toast reads LIVE REC: QUANTIZED / UNQUANTIZED The two toast strings are reworded from the author's QUANT LIVE REC ON / OFF. No instruction changed; the unit grows from 176 to 180 bytes, so the manifest's reference is now Modwerk's SHA-256, with the author's kept in a comment. The gate reads the unit's length from the manifest and passes 29 of 29 on a static native build. Captures, thumbnail, docs and the import record follow. In the emulator the 21-character UNQUANTIZED toast fits the screen. The new wording has not been seen on a unit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: record the user's MKII report on OMXATS19 The gesture, live-record start and [REC] release as the user reported them on the combined test image, which carried the earlier toast wording. A power cycle, the current wording and a tap after expiry remain untested on a unit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: the tap after the toast expires, as reported on the MKII Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: MKII report on OMXATS21 (wording fits, power cycle) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: redraw an open PERSONALIZE list after a flip On an MKII the QUANTIZE LIVE REC box stayed stale after a flip by the gesture until an arrow key was pressed (the author's open item). Stock redraws a PROJECT menu page only after a key reaches that page, and [REC]/[PLAY] do not. After a flip the unit now calls the stock redraw routine 0x40064d7c, which returns at once when the menu is closed. Unit 180 -> 186 bytes, qlr_recrel at 0x7a. The gate gains a PERSONALIZE-open part and passes 36 of 36 on a static native build. Not yet run on a unit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: the redraw beside Output Matrix's AUDIO page, in the emulator Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: MKII report on QLRTEST02 (module alone, PERSONALIZE redraw) The user flashed QLRTEST02 (this module alone at 50f6539) and reported every walkthrough step passing: the PERSONALIZE box follows each flip, CONTROL > AUDIO is left alone, the gesture and a power cycle work. The hardware record in qualification.example.json is filled from that report. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: bind the evidence to QLRTEST02; review fixes - The gate (36 of 36), the captures (same pixels) and the instruction counts are re-run on QLRTEST02's MAIN OS, the image tested on the MKII, and every record names it in place of the earlier emulator-only build. - The module record's limitations, highlights and build reason now match the MKII report. - Stale comments corrected, marked MODWERK: the PERSONALIZE open item, the register note at the [PLAY] entry, the toast length, and the manifest's "nothing has run on an MKII". The source still rebuilds to QLRTEST02's MAIN OS byte for byte; import hashes and the native source hash updated. - verify.py stops with an error outside an octabam root instead of skipping every check and exiting 0. - The user's flip during a PROJECT menu pop-up is recorded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: hardware reported, pinned to the tested source; comparison re-run blocked tests.hardwareStatus is now "reported" and tests.evidenceRevision the tested source commit 50f6539, which the listing contract requires of an attributed hardware report. TESTING.md records that the native-vs-browser comparison could not be repeated for the 186-byte unit on current main: listing's shared composer changes trip the Tape Echo browser-preservation binding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: what the Tape Echo binding still refuses after #562 Re-run on main 8eabba1: this module's package rows pass the binding now; the shared code listing changes (requested-modules.ts, compose-os.ts, build-module-packages.py and the compilerSha256 it changes) are still refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: the private USB package, in the emulator ABI 7 package from this source: install, removal and Undo pass on the beta base in the emulator. The strict stock-free scan refuses it (two 12-byte runs coincide with stock), and the catalogue name is too long for a package name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: no 12 bytes repeat stock code (USB stock-free scan) The strict stock-free scan refused the USB package on two 12-byte runs that coincide with stock: the flip's store of the setting then its battery copy, and the checksum call then the redraw call. The flip now writes the shadow first and reaches the redraw through %a0 (lea; jsr (%a0)): same calls, same order. Unit 186 -> 188 bytes, qlr_recrel at 0x7c. New image QLRTEST03 (module alone, every stock effect): gate 36 of 36, captures pixel-identical, invert paths 25 instructions (static 26). The USB package passes both strict scans; install, removal and Undo pass on the beta base in the emulator. Not yet run on a unit: the MKII report stays bound to QLRTEST02 until a retest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: MKII report over USB for the current source Package 026464de (source d7526ad) on the user's MKII with the flashed beta base: trials undone, a kept trial, the gesture, the PERSONALIZE redraw, a power cycle with the module persisting, and removal, as reported. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: listing dry run on current main 0 mismatches of 130 selections for the 188-byte unit; Tape Echo's binding and the native-metadata size no longer stand in the way. Still needed: a hardware record the contract accepts for this source, the performance waiver, a short package name and the base rebuilt with this module's chooser entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quantize Live Rec Toggle draft: listed as Quant Live Rec The user's choice: the 15-character name its USB package already carries, so the published package can take its name from the catalogue. The module id, key and attribution are unchanged; the README credits the author's name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: listed in sdk/octabam/modules, bound to the MKII-tested USB package - The module folder moves from sdk/drafts to sdk/octabam/modules with its catalogue entry, licence component and changelog file. - tests.qualification binds the USB package 026464de... that ran on the MKII (15 October 2026), not the untested card image QLRTEST03. - Packages built in the isolated toolchain and imported; module:verify 0 mismatches of 130 with its chooser-metadata entry; the beta base rebuilt for that entry; QLR's USB package row in octatrack-module-packages.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: USB package published; standalone recipes name the rebuilt shared assets - npm run octatrack:module-packages -- --stock OS1.40C: QLR's USB package 0.1.0-experimental is byte-identical to the one that passed on the MKII (026464de…, ABI 7, 356 bytes, module 7d0747d4); 0 bytes shared with the stock OS. The base-bound packages now name the rebuilt beta base 2802e05c. - Tape Echo's and Euclid's standalone recipes: the hashes of the four shared asset rows (dsp-packages, descriptor-recipes, menu-recipes, rom-packages) are refreshed. Those files changed only in their sourceCommit stamp and the new quantize-live-rec-toggle version row (provenance only, as in #645). Tape Echo (21b953eb…) and Euclid (649f2670…) package bytes are unchanged. - modules:generate, modules:pairs --write and licenses:generate write nothing new; module:verify 0 mismatches of 130 (46 images match, 84 refusals match), native comparison record unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: the runtime-package test lists its published USB package Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: packages rebuilt in the isolated toolchain on current main Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: native comparison on current main, 0 mismatches of 130 The branch's old requestedCaves change (no overflow fallback for Recorder Loop Fix's floating cave) mirrored native before #682; since #682 native places that cave in the overflow run as main's browser composer does, so main's version is restored and two refusals that differed only in their reason match again. Only the LATE_ROM ordering for this module's ROM unit remains. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: beta base and USB package rows on current main - npm run octatrack:base with the beta flags (--usb-midi --usb-audio 'USB AUDIO OUT TRACKS MAIN CUE' --site-events --table-owners --resident-stock-hooks --resident-on-demand --controllers, no --cached-modules) --write: main's 6650236a rebuilt byte for byte first; with this module's chooser-metadata entry the base is 24b25c39. Only base-binding.json's identity moved (lease symbols unchanged, so Analog BD's recipe stands); stock-free scan, browser .bin = build_core.py .bin and the flash-safety check passed. - Base-bound packages relinked for 24b25c39: Sidechain Compressor, Output Matrix, CC Map, Recorder Loop Fix and Analog BD keep their bytes; only requiredBase changes. - Quant Live Rec's USB package row: 026464de... (356 bytes, ABI 7, module 7d0747d4), byte-identical to the package that passed on the MKII; no stock run of 12 bytes, no check_stock_free hit. - Tape Echo's and Euclid's standalone recipes: the four shared asset hashes (dsp-packages, descriptor-recipes, menu-recipes, rom-packages) follow the rebuilt packages, which changed only in provenance and this module's version row; Tape Echo (21b953eb) and Euclid (649f2670) rebuild to their committed bytes. - analog-bd-composition-proofs.json: moduleSourceTreeSha256 follows module-build.json, as main's releases do. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: TESTING.md names the listing as it now stands on main Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: emulator load and stress rows, MIDI transport never reaches it evidence/performance.json now carries ot_emu measurements (not hardware), taken with Apply Scene's method: CF METER on a stock and a Quant Live Rec image under the same MIDI flood (about 1,000 messages a second and clock at 240 BPM) and the same keys (hold [REC], [PLAY], [PLAY], release [REC]). Flood alone: longest frame interrupt 129.3 us stock, 129.2 us with the module, idle 62.38 % both. With the gesture: 149.6 vs 149.5 us, idle 60.46 vs 60.19 %. 62 s with STOP mid-note, Part changes and 24 gestures (24 flips): no message missing, nothing stuck, no hang. MIDI START, CONTINUE and STOP run their own handlers and never enter the [PLAY] key handler 0x40061778 or the unit. The cycles row stands: 4 to 25 authored instructions per event over 115 events under the flood. perf:audit and module:doctor pass. TESTING.md, the manifest's resource text and the changelog limits follow; hardwareEvidence asks the owner whether the emulator rows stand in. The evidence file is part of the module's native source hash, so the qualification hash moves to 403c3e4b (manifest.py, patch_qlrec.s and verify.py unchanged; the USB package still builds to 026464de), and module:verify was re-run: 130 selections, 46 built and 84 refused, 0 mismatches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: record the Part reload on the MKII (setting unchanged) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: record the project reload on the MKII (setting unchanged) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Quant Live Rec: record the reloads in the changelog; LATE_ROM comment The changelog and the qualification's hardware limitations still listed Part and project reload as untested; TESTING.md records both on the MKII on 20 October. A private companion module is no longer named. The LATE_ROM comment in requested-modules.ts now says which modules it holds and why the others listed after the utilities are absent (their units go to DRAM or fixed caves). No native source change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The Tape Echo browser-preservation binding accepted only
sourceCommitstamping in the shared package files undersrc/engine/assets. Any module release that changes compiled packages therefore failedmodules:check:Reproduced locally: clean
mainpasses;mainplus one other module'scoldfire-packages.jsonfails. This is what stops #555 (bothmodule-contractandmodule-paths-windows) and would stop #558, #560 and #561 and every later package-changing release or author update.Change
publicationInputsinscripts/browser-infrastructure-preservation.mjsnow compares the shared package files,module-build.jsonandanalog-bd-composition-proofs.jsonthe way retained evidence already does: other modules' rows, version labels and source-tree identity are ignored.engineAssetandotherModuleIdsmove toscripts/engine-asset.mjsso both callers share one definition.Still required to match: every other byte, the
module-build.jsonfile hashes, the provenance stamp (the current commit or the validated file's own value) and unambiguous JSON (duplicate keys are rejected;JSON.parsewould otherwise keep the last one). A pure provenance stamp still has to match byte for byte.Verification
npm run check -- --base origin/main: all green, 2308 of 2308 tests.Generated catalog is stale(itssrc/catalog/module-documents.jsonwas not regenerated). Afternpm run modules:generatethe module check passes there too.Limits and review
src/engine/*.tsetc. still needs the owner's binding refresh with the private OS image.module-changelogs.jsonentry;CHANGELOG.mdis updated.After merge, for #555
Merge
maininto the FM Synth branch (so the fixed scripts apply), runnpm run modules:generateand commitsrc/catalog/module-documents.json. POLY8 + FM Synth stays refused until POLY8's composition is updated in its own release.🤖 Generated with Claude Code